import QtQuick 1.0
import "Util/Util.js" as Util

Item{
    id: _root
    anchors.fill: parent

    property int containerId: -1


    Component.onCompleted: {
        openTweetContainer(false);
    }

    signal lineFocusChanged(int current)                // ラインへのフォーカスが変更されたことを通知する
    signal lineTitleChanged(string title)               // タイトルの変更
    signal nextFocusLine(int current, bool increment)   // フォーカスを次へ移動させる
    signal nextFocus(int current, bool increment)       // フォーカスを次のアイテムへ移動させる


    ///////////////////////////////////////////
    // 表示操作
    ///////////////////////////////////////////

    // ツイートコンテナを開閉する
    function openTweetContainer(is_open){
        if(is_open){
            if(state === ""){
            }else{
                state = "";
            }
        }else{
            if(state === "NoneTweet"){
            }else{
                state = "NoneTweet";
            }
        }
    }
    // ツイートコンテナが開いてるか
    function isOpenTweetContainer(){
        var ret = true;
        if(state === "NoneTweet"){
            ret = false;
        }
        return ret;
    }

    // 検索コンテナを開閉する
    function openSearchContainer(is_open){
        Util.outputDebugString("is=" + is_open);
        if(is_open){
            if(state === "ViewSearch"){
            }else{
                state = "ViewSearch";
            }
        }else{
            if(state === "NoneTweet"){
            }else{
                state = "NoneTweet";
            }
        }
    }
    // 検索コンテナが開いてるか
    function isOpenSearchContainer(){
        var ret = false;
        if(state === "ViewSearch"){
            ret = true;
        }
        return ret;
    }


    ///////////////////////////////////////////
    // フォーカス関連
    ///////////////////////////////////////////

    // 0 -> 1 : コンテンツ -> Edit
    // 1 -> 2 : Edit -> ボタン
    // 2 -> 0 : ボタン -> コンテンツ
    function setNextFocus(current, increment){
        if(_Setting.toFocusTweetButton){
            // ツイートボタンもフォーカスする
            if(increment){
                current++;
            }else{
                current--;
            }
        }else{
            // フォーカスしない
            current = (current === 0) ? 1 : 0;
        }
        if(state === "NoneTweet"){
            // 展開してないときは開く
            openTweetContainer(true);
        }
        if(current > 2){
            current = 0;
        }else if(current < 0){
            current = 2;
        }

        // フォーカスセット
        switch(current){
        case 0:
            // 0 : コンテンツ
            _content.setFocusActiveListView();
            break;
        case 1:
            // 1 Edit
            _tweet.setFocusTextEdit(true);
            break;
        case 2:
            // 2 : ボタン
            _tweet.setFocusButton(true);
            break;
        default:
            break;
        }
    }

    // 入力へフォーカスを当てる
    function setFocusTextEdit(is){
        if(is){
            // ? -> 1 : ? -> Edit
            _tweet.setFocusTextEdit(true);
        }else{
            // 1 -> ? : Edit -> ?
            _content.setFocusActiveListView();
        }
    }


    // Twitterの設定をする
    function setTwitterSetting(consumerKey, consumerSecret
                               , oauthToken, oauthTokenSecret
                               , screenName, userId){

        _tweet.consumerKey = consumerKey;
        _tweet.consumerSecret = consumerSecret;
        _tweet.oauthToken = oauthToken;
        _tweet.oauthTokenSecret = oauthTokenSecret;
        _tweet.screenName = screenName;
        _tweet.userId = userId;

        _content.consumerKey = consumerKey;
        _content.consumerSecret = consumerSecret;
        _content.oauthToken = oauthToken;
        _content.oauthTokenSecret = oauthTokenSecret;
        _content.screenName = screenName;
        _content.userId = userId;
    }



    //つぶやきを入力するエリアの管理
    property alias tweet: _tweet
    TweetContainer {
        id: _tweet
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: parent.right
        opacity: 1
        density: _Device.density

        onNextFocusLine: {
            _root.nextFocusLine(containerId, increment);
        }
        onNextFocus: {
            _root.setNextFocus(current, increment);
        }
    }

    // 検索を入力するエリアの管理
    property alias search: _search
    SearchContainer{
        id: _search
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: parent.right
        opacity: 0.0
        density: _Device.density

        onNextFocusLine: {
            _root.nextFocusLine(containerId, increment);
        }
    }

    // コンテンツ
    property alias content: _content
    Container {
        id: _content
        anchors.top: _tweet.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        color: _Setting.backgroundColor
        opacity: _Setting.backgroundOpacity

        onItemClicked: {
            lineFocusChanged(containerId);
        }
        onTitleChanged: {
            lineTitleChanged(title);
        }
        onNextFocusLine: {
            _root.nextFocusLine(containerId, increment);
        }
        onNextFocus: {
            _root.setNextFocus(0, increment);
        }
    }

    states: [
        State {
            name: "NoneTweet"

            PropertyChanges {
                target: _tweet
                opacity: 0
                height: 0
            }
        },
        State {
            name: "ViewSearch"
            PropertyChanges {
                target: _search
                opacity: 1.0
            }
        }

    ]

    transitions: Transition {
        SequentialAnimation{
            ScriptAction {
                script: {
                    if(state === "ViewSearch"){
                        // search
                        _search.setFocusTextEdit(true);
                    }else if(state === ""){
                        // tweet
                        setFocusTextEdit(true);
                    }else{
                    }
                }
            }

            NumberAnimation {
                easing.type: Easing.OutCubic
                targets: [_tweet, _search]
                properties: "opacity, height"
                duration: 500
            }
        }

    }

}
